C语言中int (*p)[4]与int **p的区别

来源:百度知道 编辑:UC知道 时间:2024/06/23 03:25:32
这两个p是否含义相同,区别请详告,必有重赏!
我知道的只是int (*p)[4]中的p是指向一个二维数组的指针,我还想知道这两个p是否相等?
请大家注意int (*p)[4]代表的是一个指向二维数组的指针,而int *p[4]则代表的是4个指向一维数组的指针,大家一定不要混淆!请大家说的具体一下,不要敷衍了事!望C高手支援!
我将我的结论写在了最后,就算是这个问题的总结和拓展吧,分就献给dukehhh!
就是:经过两天的上机试验和自己的推理,我要感谢的是dukehhh同志,我是沿着你的想法推理下去的,你的想法是正确的,而且我还帮你进行了补充...

int (*p)[4];//是指向一个2维数组的指针
int **P;//是一个指针的指针
两个都是指向地址的
int (*p)[4] 是接收二维数组的地址(常量)
int **p 是接收指针变量的地址(变量)

我是这么理解的,不知道对不。

这两个p的定义是不兼容的, 就是说如果你定义一个 int **a , int (*b)[4],他们之间互相赋值必须经过强制类型转换,否则编译器通不过。

但是并不是说这两者之间有多大的差别, 很多时候他们之间的互相赋值是合理的。

我已经说的很清楚了, 类型之间谈相等没有任何意义。 类型之间主要就是兼容性, 这两个按语法规则就是不兼容。 至于你说的“含义”相同与否,含义这个东西语法是不认的,含义是不是相同看你脑子里怎么想。 要知道,你脑子里的程序跟编译器眼里的东西不是一回事的

就像百地瓜说的啊,一般int(*p)[4]要用的时候都是要带着下标,除了作为实参的时候.

不相等,int(*p)[4]是4个指向一唯数组的指针,int **p是一个指向二维数组的指针。从定义角度出发是不一样的

经过两天的上机试验和自己的推理,我要感谢的是dukehhh同志,我是沿着你的想法推理下去的,你的想法是正确的,而且我还帮你进行了补充:
int *p;是一个指针变量,与之相对应的是int p[n];
int (*p)[4];//是指向一个2维数组的指针,与之相对应的是int p[][4];
int **p;//是指向一个指针的指针 ,与之相对应的是int *p[n],它们都是指向字符串的指针数组,而且二位动态数组开辟后只能将值赋予它(**p),因为只有它的数据结构才能满足;
两个都是指向地址的 。
很多朋友为二维动态数组的数据结构感到困惑,现在我将我对它的分析先给大家,希望对大家能有一些帮组:
先通过p=(int **)malloc(n*sizeof(int *));相当分配了n个连续的int *类型的内存空间,它们的地址是相连的,即p[n]数组,其类型是int *类型,现在为数组中的每个变量(p[0]、p[1]、p[2]…p